/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ee.cybertron.energon.beans;

import com.icesoft.faces.context.effects.Appear;
import com.icesoft.faces.context.effects.Effect;
import com.icesoft.faces.context.effects.EffectQueue;
import com.icesoft.faces.context.effects.Fade;
import javax.faces.event.ActionEvent;

/**
 *
 * @author stevenziggiz
 */
public class VistaMensajes {
    
    private Effect efecto;
    private String mensaje;
    private boolean visible;
    private TIPO tipo;

    public enum TIPO {

        INFORMACION,
        ADVERTENCIA,
        ERROR,
        ERROR_FATAL,
        INVISBLE
    }

    /** Creates a new instance of VistaMensajes */
    public VistaMensajes() {
        setVisible(false);
        setTipo(TIPO.INVISBLE);
    }
    
//<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
//Métodos
    /**
     * Muestra el mensaje y su debido efecto visual
     */
    private void mostrarEfecto() {
        EffectQueue fadeAppear = new EffectQueue("effectFadeAppear");
        Appear blind = new Appear();
        blind.setDuration(1f);
        fadeAppear.add(blind);
        Fade fade = new Fade();
        fade.setDuration(10f);
        fadeAppear.add(fade);
        efecto = fadeAppear;
        setVisible(false);
        setTipo(TIPO.INVISBLE);
    }   //mostrarEfecto

    public void cerrarPopup(ActionEvent e)
    {
        setVisible(false);
    }   //

    /**
     * Devuelve el estilo que van a tener los mensajes
     * @return
     */
    public String getEstilo() {
        switch (tipo) {
            case INFORMACION:
                return "mensaje_informativo";
            case ADVERTENCIA:
                return "mensaje_advertencia";
            case ERROR:
                return "mensaje_error";
            default:
                return "invisible";
        }   //switch
    }

    public Effect getEfecto() {
        return efecto;
    }

    private void setEfecto(Effect efecto) {
        this.efecto = efecto;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        setMensaje(mensaje, TIPO.INFORMACION);
    }

    public void setMensaje(String mensaje, TIPO tipo) {
        this.mensaje = mensaje;
        mostrarEfecto();
        setTipo(tipo);
    }

    public void setMensajeFatal(String mensaje, TIPO tipo){
        setMensaje(mensaje, tipo);
        setVisible(true);
    }

    public boolean isVisible() {
        return visible;
    }

    private void setVisible(boolean visible) {
        this.visible = visible;
    }

    public TIPO getTipo() {
        return tipo;
    }

    public void setTipo(TIPO tipo) {
        this.tipo = tipo;
    }
}
